//package com.example.pets.model.datasource.DataSourceImpl;
//
//
//import androidx.lifecycle.LiveData;
//import androidx.lifecycle.MutableLiveData;
//
//import com.example.pets.model.datasource.PetDataSource;
//import com.example.pets.model.entities.Pet;
//import com.google.firebase.firestore.CollectionReference;
//import com.google.firebase.firestore.DocumentReference;
//import com.google.firebase.firestore.FirebaseFirestore;
//import com.google.firebase.firestore.Query;
//import com.google.firebase.firestore.QueryDocumentSnapshot;
//import com.google.firebase.firestore.SetOptions;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class PetDataSourceImpl implements PetDataSource {
//
//    private final FirebaseFirestore db = FirebaseFirestore.getInstance();
//    private final CollectionReference petsCollection = db.collection("pets");
//
//    @Override
//    public LiveData<Pet> getPetById(String pid) {
//        MutableLiveData<Pet> petLiveData = new MutableLiveData<>();
//        petsCollection.document(pid).get()
//                .addOnSuccessListener(snapshot -> {
//                    Pet pet = snapshot.toObject(Pet.class);
//                    petLiveData.setValue(pet);
//                })
//                .addOnFailureListener(e -> petLiveData.setValue(null));
//        return petLiveData;
//    }
//
//    @Override
//    public LiveData<Boolean> addPet(Pet pet) {
//        MutableLiveData<Boolean> result = new MutableLiveData<>();
//        petsCollection.add(pet)
//                .addOnSuccessListener(docRef -> result.setValue(true))
//                .addOnFailureListener(e -> result.setValue(false));
//        return result;
//    }
//
//    @Override
//    public LiveData<Boolean> updatePet(String pid, Pet pet) {
//        MutableLiveData<Boolean> result = new MutableLiveData<>();
//        petsCollection.document(pid).set(pet, SetOptions.merge())
//                .addOnSuccessListener(unused -> result.setValue(true))
//                .addOnFailureListener(e -> result.setValue(false));
//        return result;
//    }
//
//    @Override
//    public LiveData<Boolean> deletePet(String pid) {
//        MutableLiveData<Boolean> result = new MutableLiveData<>();
//        petsCollection.document(pid).delete()
//                .addOnSuccessListener(unused -> result.setValue(true))
//                .addOnFailureListener(e -> result.setValue(false));
//        return result;
//    }
//
//    @Override
//    public LiveData<List<Pet>> getPetsByUser(DocumentReference userRef) {
//        MutableLiveData<List<Pet>> petsLiveData = new MutableLiveData<>();
//
//        petsCollection.whereEqualTo("owner", userRef)
//                .addSnapshotListener((querySnapshot, e) -> {
//                    if (e != null || querySnapshot == null) {
//                        petsLiveData.setValue(null);
//                        return;
//                    }
//
//                    List<Pet> pets = new ArrayList<>();
//                    for (QueryDocumentSnapshot doc : querySnapshot) {
//                        Pet pet = doc.toObject(Pet.class);
//                        pets.add(pet);
//                    }
//                    petsLiveData.setValue(pets);
//                });
//
//        return petsLiveData;
//    }
//
//
//    @Override
//    public LiveData<List<Pet>> getPetsByUserOrdered(DocumentReference userRef, boolean ascending) {
//        MutableLiveData<List<Pet>> petsLiveData = new MutableLiveData<>();
//        Query.Direction direction = ascending ? Query.Direction.ASCENDING : Query.Direction.DESCENDING;
//
//        petsCollection
//                .whereEqualTo("owner", userRef)
//                .orderBy("createTime", direction)
//                .addSnapshotListener((querySnapshot, e) -> {
//                    if (e != null || querySnapshot == null) {
//                        petsLiveData.setValue(null);
//                        return;
//                    }
//
//                    List<Pet> pets = new ArrayList<>();
//                    for (QueryDocumentSnapshot doc : querySnapshot) {
//                        Pet pet = doc.toObject(Pet.class);
//                        pets.add(pet);
//                    }
//                    petsLiveData.setValue(pets);
//                });
//
//        return petsLiveData;
//    }
//
//}
